تفاوت <out T> و <T> در جنریکها

آخرین بروز رسانی: 1400/12/04

تا حالا به کلمات in و out که تو بعضی جنریکها هست دقت کردید؟ اصن چه معنی دارن و اگر نباشن چه فرقی میکنن؟

کد زیر رو در نظر بگیرید

class Fruit {}
class Banana : Fruit {}


interface ICovariantSkinned<out T> {}

interface ISkinned<T> {}

 و حالا توابع زیر

void Peel(ISkinned<Fruit> skinned) { }

void Peel(ICovariantSkinned<Fruit> skinned) { }

تابعی که ICovariantSkinned<Fruit> را می پذیرد می تواند ICovariantSkinned<Fruit> یا ICovariantSkinned<Banana> را بپذیرد زیرا ICovariantSkinned<T> یک رابط کوواریانت و Banana یک نوع Fruit است.

توابعی که ISkinned<Fruit>   را می پذیرند, فقط  ISkinned<Fruit> را میپذیرند

 

 

 

نظر دهید

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی علامت گذاری شده اند *